﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using App.Modelo.Config;
using App.Modelo.Interfaces;
using App.Persistencia;
using App.Seguridad.Vista.Comandos;
using App.Seguridad.Vista.Forms;
using App.Controlador;

namespace App.Seguridad.Vista
{
    public class ModuloPrincipal : ISessionActual, IModuloPrincipal 
    {
        private readonly IDictionary<string, IComando> _comandos = new Dictionary<string, IComando>();

        public IDictionary<string, IComando> CatalogoComandos
        {
            get { return _comandos; }
        }
        
        private IUsuario _usuarioActual; 
        public SeguridadConfiguration Configuration { get; set; }

        public event EventHandler<UsuarioAccesoEventArgs> UsuarioLogin;
        public event EventHandler<UsuarioAccesoEventArgs> UsuarioLogout;

        public void Configurar()
        {
            Configuration = SeguridadConfiguration.GetConfig();
        }

        private FormularioPrincipal _formularioPrincipal;

        public Form FormularioPrincipal
        {
            get
            {
                if (_formularioPrincipal == null)
                {
                    _formularioPrincipal = Forms.FormularioPrincipal.Instance;

                    _formularioPrincipal.ControladoraUsuarios = new ControladoraUsuarios()
                                                                    {
                                                                        Repositorio = new Repositorio()
                                                                    };

                    _formularioPrincipal.SessionActual = (ISessionActual)this;

                }
                return _formularioPrincipal;
            }
        }

        public IUsuario UsuarioActual
        {
            get { return _usuarioActual; }
            set
            {
                if (null == value)
                {
                    if (UsuarioLogout != null)
                        UsuarioLogout(this, new UsuarioAccesoEventArgs() {Usuario = _usuarioActual});
                    _usuarioActual = null;
                }
                else
                {
                    _usuarioActual = value;
                    if (UsuarioLogin != null)
                        UsuarioLogin(this, new UsuarioAccesoEventArgs() {Usuario = _usuarioActual});

                }
            }
        }


        public void AbrirFormulario(Form form)
        {
            form.MdiParent = FormularioPrincipal;
            form.ShowIcon = false;
            form.StartPosition = FormStartPosition.Manual;
            form.Top = 0;
            form.Left = 0;
            form.Show();
        }


       
    }
}